""" 297. 二叉树的序列化与反序列化 序列化是将一个数据结构或者对象转换为连续的比特位的操作，进而可以将转换后的数据存储在一
个文件或者内存中，同时也可以通过网络传输到另一个计算机环境，采取相反方式重构得到原数据。

请设计一个算法来实现二叉树的序列化与反序列化。这里不限定你的序列 / 反序列化算法执行逻辑，你只需要保证一个二叉树可以被序
列化为一个字符串并且将这个字符串反序列化为原始的树结构。

提示: 输入输出格式与 LeetCode 目前使用的方式一致，详情请参阅 LeetCode 序列化二叉树的格式。你并非必须采取这种方式，你也可
以采用其他的方法解决这个问题。 """
#  from utils import TreeNode
from collections import deque
from typing import List

from binarytree import Node, build2, tree


def serialization(root: Node) -> List:
    queue = deque()
    res = []
    node = root
    queue.append(node)
    res.append(str(node.val))
    while queue:
        node = queue.popleft()
        if not node.left and not node.right:
            break
        if node.left:
            res.append(str(node.left.val))
            queue.append(node.left)
        else:
            res.append("null")
        if node.right:
            res.append(str(node.right.val))
            queue.append(node.right)
        else:
            res.append("null")
        res = ",".join(res)
    return "[" + res + "]"


node = build2([2, 5, None, 3, None, 1, 4])

print(node)
my_tree_string = serialization(node)[1:-1]
tree_list = []
for val in my_tree_string.split(","):
    if val != "null":
        tree_list.append(int(val))
    else:
        tree_list.append(None)
print(tree_list)
#  print(new_node)
